package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.EstructuraUtil;
import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.Calibre;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

/**
 * <p>
 * 
 * </p>
 */
public class CalibreDAO extends GenericDAO<Calibre> {
    
    private static final Logger miLogger = Logger.getLogger(CalibreDAO.class);
    
    /** Nombre de la tabla Tamaños : mapeamos directo contra atributos*/
    private static final String TAMANIO = "TamanosAtributos";
    
    // Columnas de la tabla TamañosAtributos
    private static final String TAMANIO_CALIB = "Tamano";
    private static final String TAMANIO_ESPECIE = "Atributo1";
    private static final String TAMANIO_ENVASE = "Atributo2";
    private static final String TAMANIO_CLAVE = "Atributo4";
    
    /** Nombres de las columnas a ser utilizadas de la tabla Tamaños. */
    private static final String[] TAMANIO_COLUMNAS = {TAMANIO_CLAVE, TAMANIO_CALIB, TAMANIO_ESPECIE, TAMANIO_ENVASE};
    
    /** Nombres de las columnas a ser utilizada como PK de Tamaños. */
    private static final String[] TAMANIO_PK = {TAMANIO_CLAVE};
    private static final String fs = new Character('\u001C').toString();    

    @Override
    protected String getEntidadKeyValue(Calibre cal) {
        return cal.getMiTamanoCalibre() + fs + cal.getMiEspecieCod() + fs + cal.getMiEnvaseCod();
    }

    @Override
    protected String getEntidadTableName() {
        return TAMANIO;
    }

    @Override
    protected String getPKProperty() {
        return "miTamanoCalibre";
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<Calibre> laLista) {
        opDataArray[] losDatosTamanios = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losDatosTamanios.length; i++) {
            losDatosTamanios[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Calibre calibre : laLista) {
            RegisterBuilder tamaniosRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            tamaniosRegisterBuilder.setData(TAMANIO_CLAVE, getEntidadKeyValue(calibre));
            tamaniosRegisterBuilder.setData(TAMANIO_CALIB, calibre.getMiTamanoCalibre());
            tamaniosRegisterBuilder.setData(TAMANIO_ESPECIE, calibre.getMiEspecieCod());
            tamaniosRegisterBuilder.setData(TAMANIO_ENVASE, calibre.getMiEnvaseCod());
            
            opDataArray dataAux = tamaniosRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losDatosTamanios[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losDatosTamanios;
    }
    
    @Override
    protected String[] getEntidadFieldsNames(){
        return TAMANIO_COLUMNAS;
    }
    
    @Override
    protected String[] getEntidadPKFieldsNames(){
        return TAMANIO_PK;
    }
    
}